package com.ftg.midamall.comm.global;

import com.ftg.midamall.comm.exception.MallException;
import com.ftg.midamall.comm.vo.CodeStatusEnum;
import com.ftg.midamall.comm.vo.ConstUtil;
import com.ftg.midamall.comm.vo.RespMessUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.sql.SQLException;

/**
 * 全局异常  统一化处理
 * <p>
 * 全局化异常
 *
 * @author qjw
 * @version 1.0
 * @date 2023/9/15 14:07
 */
@RestControllerAdvice
@Slf4j
public class GlobalException {

    /**
     * 处理自定义异常现在只用于令牌
     * @param e
     * @return
     */
    @ExceptionHandler(value= MallException.class)
    public RespMessUtil<?> mallException(MallException e){
        log.error(e.getMessage());
        e.printStackTrace();
        return RespMessUtil.build(CodeStatusEnum.INVALID_LOGIN_TOKEN, e.getMessage());
    }

    /**
     * springboot  错误日志
     * 处理SQLException全局异常
     */
    @ExceptionHandler(value = SQLException.class)
    public RespMessUtil<?> sqlException(Exception e) {
        //将错误信息打印到控制台
        //不应该 打印到控制台
        //开发阶段要有的
        log.error(e.getMessage());
        e.printStackTrace();
        return RespMessUtil.build(CodeStatusEnum.FAILURE, ConstUtil.TIP_VO_SQL);
    }

    /**
     * 处理Exception全局异常
     */
    @ExceptionHandler(value= Exception.class)
    public RespMessUtil<?> deelException(Exception e){
        log.error(e.getMessage());
        e.printStackTrace();
        return RespMessUtil.build(CodeStatusEnum.FAILURE);
    }
}
